Модуль:Form calculator
implements Template:Form calculator -- for generating form calculators -- RuneScape:Calculators/Form calculators -- -- performs some minor checks on the input; the javascript still does most of it, though -- -- local pt = require('Module:Paramtest') local hascontent = pt.has_content local defto = pt.default_to -- possible parameter types local param_types = {string = true, article = true, number = true, int = true, select = true, check = true, hs = true, fixed = true, hidden = true, semihidden = true} local p = {} --used internally but can also be an entry point function p.jsnotice(frame) local page = mw.title.getCurrentTitle() if frame and frame:getParent().args.forminit then return frame:getParent().args.forminit else return 'The calculator form will appear here soon. You will need Javascript enabled and cannot be using the mobile version of the Wiki.\n\nIf you are on a mobile device, you can load the full version of the site by .. page:fullUrl('useskin=oasis') .. ' clicking here.' end end --used internally but can also be an entry point function p.resnotice(frame) if frame and frame:getParent().args.resultinit then return frame:getParent().args.resultinit else return 'The result will appear here when you submit the form.' end end --main entry for constructing a calculator function p.main(frame) local args = frame:getParent().args local template, form, result local err = '' if hascontent(args.template) then template = args.template else err = 'No template specified ' end if hascontent(args.form) then form = args.form else err = err .. 'No form ID specified ' end if hascontent(args.result) then result = args.result else err = err .. 'No result ID specified ' end local cat = '' -- if the category is not overriden AND page param is missing OR the page param = the title if defto(args.cat, 'yes') ~= 'no' and (not hascontent(args.page) or args.page mw.title.getCurrentTitle().prefixedText) then cat = 'Category:Form calculators' end if err ~= '' then if cat ~= '' then cat = cat .. 'Category:Form calculator errors' end return .."'Fatal error(s) found in form definition:' " .. err .. '' .. cat end local conf = mw.html.create('div') conf:addClass('hidden jcConfig') :wikitext('\n') :wikitext('template = ' .. template .. '\n') :wikitext('form = ' .. form .. '\n') :wikitext('result = ' .. result .. '\n') :done() if hascontent(args.suggestns) then --check ns stuff for i,v in pairs(mw.text.split(args.suggestns, ',', true)) do if not mw.site.namespaces(tonumber(v)) then err = err .. 'Invalid namespace(s) detected in suggestns ' break end end conf:wikitext('suggestns = ' .. args.suggestns) end local i = 1 while hascontent(args.. i) do process_param(args, conf, i) i = i + 1 end local outtype = defto(args.outputtype, 'none') local out if outtype 'none' or outtype '0' then out = '' elseif outtype 'basic' or outtype '1' then out = '\n\n '..p.jsnotice(frame)..' \n '..p.resnotice(frame)..' ' elseif outtype 'verticaltable' then out = makeVTable(frame, form, result) elseif outtype 'horizontaltable' then out = makeHTable(frame, form, result) end if err ~= '' then err = '' .. "'Minor error(s) found in form definition:''' " .. err .. '' end return tostring(conf) .. tostring(err) .. tostring(out) .. tostring(cat) end function type_check(arg) if hascontent(arg) and param_typesarg then return arg else return 'string' end end function process_param(args, conf, num) local param = args.. num local label = defto(args.. num, param) local type = type_check(args.. num) local default = defto(args.. num, '') local range = defto(args.. num, '') --for clarity, do this here local str = param .. '|' .. label .. '|' .. default .. '|' .. type .. '|' .. range conf:wikitext('param = ' .. str .. '\n') end function makeHTable(frame, form, result) return mw.html.create('table') :tag('tr') :tag('td') :attr('id', form) :wikitext(p.jsnotice(frame)) :done() :tag('td') :css('width', '10px') :done() :tag('td') :attr('id', result) :wikitext(p.resnotice(frame)) :done() :done() end function makeVTable(frame, form, result) return mw.html.create('table') :addClass('wikitable') :tag('tr') :tag('th') :wikitext('Calculator') :done() :done() :tag('tr') :tag('td') :attr('id', form) :wikitext(p.jsnotice(frame)) :done() :done() :tag('tr') :tag('th') :wikitext('Result') :done() :done() :tag('tr') :tag('td') :attr('id', result) :wikitext(p.resnotice(frame)) :done() :done() end return p